package org.example.ch14;

import org.example.everyday.HighestPeak;

/**
 * <p>
 * Description:位运算
 * <p>
 * Copyright: 天津联想协同科技有限公司
 * <p>
 *
 * @author anlu
 * @date 2022/2/14 10:38
 */
public class BitDemo {

    public static void main(String[] args) {
        BitDemo b = new BitDemo();
        b.yiHuo(4);

//        int[] nums = new int[]{1,1,2,3,3,4,4,8,8};
        int[] nums = new int[]{3,3,7,7,10,11,11};
        int result = b.singleNonDuplicate(nums);
        System.out.println(result);
    }

    public void yu(){
        int a=129;
        int b=128;
        System.out.println("a 和b 与的结果是："+(a&b));
    }

    public void huo(){
        int a=129;
        int b=128;
        System.out.println("a 和b 或的结果是："+(a|b));
    }

    /**
     * 如果位为0，结果是1，如果位为1，结果是0，
     */
    public void fei(){
        int a=2;
        System.out.println("a 非的结果是："+(~a));
    }

    /**
     * 异或运算符是用符号“^”表示的，其运算规律是：
     * 两个操作数的位中，相同则结果为0，不同则结果为1
     */
    public void yiHuo(int a){
//        int a=2;
        int b=1;
        System.out.println("a 与 b 异或的结果是："+(a^b));
    }

    public int singleNonDuplicate(int[] nums) {
       int low = 0 ,height = nums.length-1;
       while(low < height){
           int mid = (height - low) / 2 + low;
           /**
            * 如果异或后 两个数相等；如果mid 是偶数，则 nums[mid] = nums[mid+1]
            * 如果mid是奇数，则nums[mid] = nums[mid - 1]
            */
           if(nums[mid] == nums[mid ^ 1]){
               low = mid + 1;
           }else{
               height = mid;
           }
       }
       return nums[low];
    }
}
